/**
*
*/
package de.yaams.maker.helper.wizard.core;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import de.yaams.maker.helper.gui.AE;
import de.yaams.maker.helper.gui.YFactory;
import de.yaams.maker.helper.gui.YHeader;
import de.yaams.maker.helper.gui.form.core.FormBuilder;
import de.yaams.maker.helper.language.T;
import de.yaams.maker.programm.YaFrame;
/**
* @author Praktikant
*
*/
public class WizardFrame extends JDialog {
private static final long serialVersionUID = 5851875404052666947L;
protected ArrayList<WizardBasePage> pages;
protected int actPage;
protected JPanel main, buttons, panel;
protected ImgComp img;
protected JButton back, next;
protected YHeader header;
protected transient AE ae;
protected FormBuilder form;
/**
*
*/
public WizardFrame(ArrayList<WizardBasePage> pages, AE ae) {
super(YaFrame.get(), "");
this.pages = pages;
this.ae = ae;
buildMainGui();
buildGui(0);
setPreferredSize(new Dimension(550, 500));
pack();
setLocationRelativeTo(null);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setVisible(true);
}
/**
* Build the main menu
*/
public void buildMainGui() {
setLayout(new BorderLayout());
// add img
img = new ImgComp();
add(img, BorderLayout.WEST);
// build header
header = new YHeader("", "yaams");
// load layout
panel = new JPanel(new GridLayout(1, 1));
// add main
main = new JPanel(new BorderLayout());
main.add(header, BorderLayout.NORTH);
main.add(panel, BorderLayout.CENTER);
main.add(new JSeparator(), BorderLayout.SOUTH);
add(main, BorderLayout.CENTER);
// build buttons
buttons = new JPanel(new FlowLayout(FlowLayout.RIGHT, 5, 5));
back = YFactory.b(T.r("wizard.back"), null, new AE() {
@Override
public void run() {
// can switch?
buildGui(actPage - 1);
}
});
buttons.add(back);
next = YFactory.b("", null, new AE() {
@Override
public void run() {
buildGui(actPage + 1);
}
});
buttons.add(next);
add(buttons, BorderLayout.SOUTH);
}
/**
* Build the menu for the act tab
*/
public void buildGui(int newID) {
// can switch?
if (form != null && !form.isValidate()) {
return;
}
if (form != null) {
form.informListeners();
}
actPage = newID;
// last?
if (actPage == pages.size()) {
finish();
return;
}
WizardBasePage p = pages.get(actPage);
// set basics
img.setImg(p.getImage());
header.setText(p.getTitle(), p.getIcon());
form = p.getForm();
form.setShowSaveButton(false);
panel.removeAll();
panel.add(form.getPanel(false));
getRootPane().revalidate();
setTitle(p.getTitle());
// set buttons
back.setEnabled(actPage > 0);
next.setText(T.r(actPage == pages.size() - 1 ? "wizard.finish" : "wizard.next"));
}
/**
* If the wizard exit, use the setting and finish all pages.
*/
public void finish() {
// clear it
pages.clear();
setVisible(false);
dispose();
ae.actionPerformed(null);
}
class ImgComp extends JComponent {
private static final long serialVersionUID = -3294897747945329105L;
protected BufferedImage img;
/**
* Create a new
*/
public ImgComp() {
super();
setPreferredSize(new Dimension(164, 360));
setBackground(new Color(6, 32, 83));
}
@Override
public void paintComponent(Graphics g) {
g.fillRect(0, 0, 300, 1000);
// img
if (img != null) {
g.drawImage(img, 0, 0, null);
}
// navi
g.setColor(Color.white);
for (int i = 0, l = pages.size(); i < l; i++) {
g.drawString((actPage == i ? "> " : "") + pages.get(i).getTitle(), 20, 30 + i * 12);
}
}
/**
* @param img
* the img to set
*/
public void setImg(BufferedImage img) {
this.img = img;
repaint();
invalidate();
}
}
}